#include <cstdio>
#include <algorithm>
using namespace std;
int read(){
	char c=getchar();int x=0;
	while(c<48||c>57) c=getchar();
	do x=x*10+(c^48),c=getchar();
	while(c>=48&&c<=57);
	return x;
}
typedef long long ll;
const int P=998244353,N=10000003;
int c[N];
int qp(int a,int b=P-2){
	int res=1;
	while(b){
		if(b&1) res=(ll)res*a%P;
		a=(ll)a*a%P;b>>=1;
	}
	return res;
}
struct frac{
	int a,b;
	frac(int A,int B):a(A),b(B){}
	friend bool operator<(const frac x,const frac y){
		return (ll)x.a*y.b<(ll)y.a*x.b;
	}
};
void solve(){
	int n=read(),x=read(),A=read(),B=read(),C=read(),m=read();
	for(int i=1;i<=n;++i){
		x=(((ll)A*x+B)%m*x+C)%m+1;
		++c[x];
	}
	frac p(0x3f3f3f3f,1);
	bool fl=1;
	while(fl){
		fl=0;
		int cnt=0,tmp=0;
		for(int i=1;i<=m;++i)
			if(c[i]){
				++tmp;
				if(c[i]>1) ++cnt;
				frac cur(tmp,tmp*2+cnt-2);
				if(cur<p) p=cur,fl=1;
				if(p<frac(tmp,tmp*2+cnt)) cnt=tmp=0;
			}
	}
	int res=(ll)p.a*qp(p.b)%P;
	printf("%.5lf %d\n",(double)p.a/p.b,res);
	for(int i=1;i<=m;++i) c[i]=0;
}
int main(){
	freopen("guess.in","r",stdin);
	freopen("guess.out","w",stdout);
	int tc=read();
	while(tc--) solve();
	return 0;
}
